package tests;

import common.Utils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.io.IOException;
import java.time.Duration;

public class LoginPage extends Utils {
    private static String url = "http://49.233.162.74:8080/blog_login.html";

    public LoginPage() {
        super(url);
    }

    private boolean isLoginHtml(){
        // 能找到页面元素，即表示已经打开加载页面
        try{
            // 博客系统
            driver.findElement(By.cssSelector("body > div.nav > span"));
            // 登录框
            driver.findElement(By.cssSelector("body > div.container-login > div > h3"));
        }catch(Exception e){
            throw e;
        }

        return true;
    }

    // 页面可以正常打开
    public void openBlogLoginHtml(){
        isLoginHtml();
    }

    // 登录测试 - 正常登录
    public void normalLogin(){
        // 用户名
        driver.findElement(By.cssSelector("#username")).sendKeys("zhangsan");
        // 密码
        driver.findElement(By.cssSelector("#password")).sendKeys("123456");
        // 登录按钮
        driver.findElement(By.cssSelector("#submit")).click();

        // 登录上之后，检查是否跳转博客列表页

        // 注销按钮
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)"));
        // 用户名
        driver.findElement(By.cssSelector("body > div.container > div.left > div > h3"));
        // 查看全文按钮
        driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a"));
    }

    // 登录测试 - 异常登录
    public void abnormalLogin1(){
        // 注销登录
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();

        // 账号为空
        driver.findElement(By.cssSelector("#username")).clear();
        // 密码正确
        driver.findElement(By.cssSelector("#password")).sendKeys("123456");
        // 登录按钮
        driver.findElement(By.cssSelector("#submit")).click();

        // 弹窗
        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(3));
        wait.until(ExpectedConditions.alertIsPresent());
        Alert alert = driver.switchTo().alert();
        alert.accept();

        // 登录失败后，还在登录页
        isLoginHtml();
    }

    // 登录测试 - 异常登录
    public void abnormalLogin2(){
        // 账号正确
        driver.findElement(By.cssSelector("#username")).sendKeys("zhangsan");
        // 密码为空
        driver.findElement(By.cssSelector("#password")).clear();
        // 登录按钮
        driver.findElement(By.cssSelector("#submit")).click();

        // 弹窗
        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(3));
        wait.until(ExpectedConditions.alertIsPresent());
        Alert alert = driver.switchTo().alert();
        alert.accept();

        // 登录失败后，还在登录页
        isLoginHtml();
    }

    // 登录测试 - 异常登录
    public void abnormalLogin3(){
        // 账号清空
        driver.findElement(By.cssSelector("#username")).clear();
        // 密码为空
        driver.findElement(By.cssSelector("#password")).clear();

        // 账号清空
        driver.findElement(By.cssSelector("#username")).sendKeys("zhangsan111");
        // 密码为空
        driver.findElement(By.cssSelector("#password")).sendKeys("123456");
        // 登录按钮
        driver.findElement(By.cssSelector("#submit")).click();

        // 弹窗
        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(3));
        wait.until(ExpectedConditions.alertIsPresent());
        Alert alert = driver.switchTo().alert();
        alert.accept();

        // 登录失败后，还在登录页
        isLoginHtml();
    }

    // 登录测试 - 异常登录
    public void abnormalLogin4() throws IOException {
        // 账号清空
        getScreenShot(getClass().getName());
        driver.findElement(By.cssSelector("#username")).clear();
        // 密码为空
        driver.findElement(By.cssSelector("#password")).clear();

        // 账号清空
        driver.findElement(By.cssSelector("#username")).sendKeys("zhangsan");
        // 密码为空
        driver.findElement(By.cssSelector("#password")).sendKeys("12345678");
        // 登录按钮
        driver.findElement(By.cssSelector("#submit")).click();

        // 弹窗
        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(3));
        wait.until(ExpectedConditions.alertIsPresent());
        Alert alert = driver.switchTo().alert();
        alert.accept();

        // 登录失败后，还在登录页
        isLoginHtml();

        driver.quit();
    }
}
